//
//  WBStatusListViewModel.swift
//  微博
//
//  Created by Mstarc on 2016/12/1.
//  Copyright © 2016年 Mstarc. All rights reserved.
//

import Foundation
import ObjectMapper
//微博数据列表视图模型
/*
 父类的选择
 
 - 如果类需要使用 'KVC' 或者是字典转模型框架 类需要继承NSObject
 - 如果类只是包装一些代码逻辑(写一些函数),可以不用任何父类,好处更加轻量级
 提示:如果使用OC写 ,一律继承自NSObject 即可
 */

//使命:负责微博的数据处理
//1.字典转模型
//2.上拉 / 下拉刷新数据处理


class WBStatusListViewModel {
    
    ///微博模型数组懒加载
    lazy var statusList  = [WBStatus]()
    ///上拉刷新错误次数
    private var pullupErroTimes = 0
    
    private var maxPullupTimes = 3
    
    /// 加载微博列表
    /// - parameter pullup: 是否上拉刷新标志
    /// - parameter complete: 完成回调[网络请求是否成功,是否刷新表格]
    func loadStatus(pullup:Bool, complete:@escaping (_ isSuccess:Bool,_ shouldRefresh:Bool)->())  {
        print("++++++++++++++++\(statusList.first?.id)")

        //判断是否为上拉刷新,同时检查刷新错误
        if pullup && pullupErroTimes > maxPullupTimes {
            complete(true, false)
            return
        }
        
        //取出数组中第一条微博的since_id
        let since_id = pullup ? 0 : (statusList.first?.id ?? 0)
        //上拉刷新 ,取出数组最后一条 微博的 id
        let max_id = !pullup ? 0 : (statusList.last?.id ?? 0)
        
        WBNetworkManager.shared().statusList(since_id: Int64(since_id),max_id: Int64(max_id)) { (list, isSuccess) in

//            //1.字典转模型
    guard let modelArr = Mapper<WBStatus>().mapArray(JSONObject: list) else{
        
            complete(isSuccess,false)
                    return
            }
            print("\(modelArr.count)")
            //2.拼接数据
            if pullup {
                self.statusList += modelArr
            }else{
                //下拉刷新要将结果数组拼接在数组前面
                self.statusList = modelArr + self.statusList
            }
            //3.判断上拉刷新的数据量
            if pullup && modelArr.count == 0 {
                self.pullupErroTimes += 1
                complete(isSuccess, false)
            }else{
//            //完成回调
            complete(isSuccess,true)
            
            }
        }
    }
    
    
    
}
